package medium

import "math"

/*
时间复杂度:O(N)
空间复杂度:O(1)

难点:如何通过两个指针进行最小值small和中间值mid的滚动变化
解决: 遍历nums,如果当前值v>mid 说明,找到了a<b<c的三个值,满足条件返回true
	如果v < small 则更新small为v,这里可能会有疑惑,这样small不就在mid的后面了吗,small应该在最前面的才对?
	虽然small不在mid前面,但是mid前面一定有一个比mid要小的数,而这里更新small,是为了考虑在当前mid后可能出现新的a<b<c的情况
	例如: 3 5 1 2 3  一开始small=3, mid=5, 如果遇到1,不将small更新为1, 则后面的2 3 均<=3, 所以无法构成a<b<c的情况
*/

func increasingTriplet(nums []int) bool {
	small, mid := math.MaxInt32, math.MaxInt32
	for _, v := range nums {
		if v > mid {
			return true
		}
		if v < small {
			small = v
		}
		if v > small {
			mid = v
		}
	}
	return false
}